// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.chat_friend.gift;

import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.eva.android.widget.SimpleGridView;
import com.eva.android.widget.SimpleGridView.DefaultElementDTO;
import com.eva.android.widget.SimpleGridView.DefaultListAdapter;
import com.x52im.rbchat.R;
import com.x52im.rbchat.logic.chat_friend.gift.model.Gift;
import com.x52im.rbchat.logic.chat_friend.gift.model.GiftsMeta;
import com.x52im.rbchat.logic.chat_friend.utils.MessageHelper;

import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

/**
 * 礼品工具界面：索取.
 * 
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @since 2.5
 */
public class GiftsPagerForGet extends GiftsPagerForRoot
{
	public GiftsPagerForGet(final Activity context, String friendUID)
	{
		super(context
				, friendUID
				, R.layout.widget_simple_viewpager
				, R.id.widget_simple_viewpager_layoutBottom
				, R.id.widget_simple_viewpager_viewPager);
	}
	
	// 根据传进来的每页元素数据集，生成该页的GridView对象
	@Override
	protected SimpleGridView createGridViewObj(Activity context, ArrayList<DefaultElementDTO> childListDatas)
	{
		return new SimpleGridView(context 
				, R.layout.chatting_gift_forget_gridview, R.id.chatting_gift_forget_gridview_id
				, R.layout.chatting_gift_forget_gridview_item, R.id.chatting_gift_forget_gridview_item_nameView, R.id.chatting_gift_forget_gridview_item_imageView
				, childListDatas)
		{
			// 重写adapter创建方法，实现自定义的view展现逻辑
			protected DefaultListAdapter createListAdapter(
					Activity context, final int maingridviewitem_layout_res_id
					, final int maingridviewitem_text_view_id, final int maingridviewitem_image_view_id
					, ArrayList<DefaultElementDTO> listDatas)
			{
				DefaultListAdapter adapter = new ListAdapterImpl(context
						, maingridviewitem_layout_res_id
						, maingridviewitem_text_view_id 
						, maingridviewitem_image_view_id); 
				// 
				adapter.setListData(listDatas);
				return adapter;
			}
		};
	}
	
	protected void fireAction(final Gift faceIdentId)
	{
        MessageHelper.sendGift$For$GetMessageAsync(parentActivity, parentFriendUID, faceIdentId.getGift_ident()
				, new Observer(){
					@Override
					public void update(Observable observable, Object data)
					{
						// 表情发送成功后的处理（此处不保证sm!=null）
						faceSendOver(//sm, 
								faceIdentId);
					}
				}
		);
	}
	
	//-----------------------------------------------------------------------------------------
	private class ListAdapterImpl extends DefaultListAdapter
	{
		public ListAdapterImpl(Activity context,
				int maingridviewitem_layout_res_id,
				int maingridviewitem_text_view_id,
				int maingridviewitem_image_view_id)
		{
			super(context, maingridviewitem_layout_res_id, maingridviewitem_text_view_id,
					maingridviewitem_image_view_id);
		}
		
		@Override
		public View getView(final int position, View convertView, ViewGroup parent)
		{
			//列表item上的：
			TextView viewText = null;
			//列表item上的：
			ImageView viewImage = null;
			TextView viewHint = null;
			
			//---------------------------------------------------------------------------------------- （1）UI初始化
			//当的item布局实例已经存在（不在存，意味着这个item刚好从不可见区移到可见区时）
			//** 根据android的列表ui实现，为了节比资源占用，假如列表有100行而可见区显示5行，那么任何时候
			//** 这个列表中只会有5个item的UI存在，其它的item都是当被转到可见区时自动把自
			//** 已的数据实时地更新列UI上，以便查看，也就是说item的UI并不是与后台数据一
			//** 一对应的，所以正如API文档里说的，convertView并不能确保它总能按你的想法保持不为null
			boolean needCreateItem = (convertView == null);
			//正在操作的列表行的数据集
			final DefaultElementDTO rowData = listData.get(position);
			final Gift extraData = (Gift)rowData.get__ident__();
			
			if (needCreateItem)
				//明细item的UI实例化
				convertView = layoutInflater.inflate(itemResId, null);
			//item里的操作组件实例
			viewText = (TextView) convertView.findViewById(maingridviewitem_text_view_id);////R.id.chatting_list_view_bottom_waves_list_item_txt);
			viewImage = (ImageView) convertView.findViewById(maingridviewitem_image_view_id);//R.id.chatting_list_view_bottom_waves_list_item_image);
			viewHint = (TextView) convertView.findViewById(R.id.chatting_gift_forget_gridview_item_hintView);
			
			//---------------------------------------------------------------------------------------- （2）增加事件处理器
			//各操作组件的事件监听器只需要在convertView被实例化时才需要重建（convertView需要被实例化
			//当然就意味着它上面的所有操作组件都已经重新新建了）
			//** 关于事件处理器的说明：事件处理器的增加其实可以不这么麻烦，直接每getView一次就给组件new一个处理器，
			//** 这样做的好处是简单，但显然存在资源浪费（每刷新一次view就新建监听器）。而现在的实现就跟Android的列表
			//** 实现原理一样，在切换到下一组item前，监听器永远只有一屏item的数量（刷新时只需要即时刷新对应item的数据到
			//** 它的监听器里），这样就节省了资源开销！
			if(needCreateItem)
			{
				//
			}

			//---------------------------------------------------------------------------------------- （3）
			// ********** 设置文本数据
			viewText.setText(extraData.getGift_name());
			GiftsMeta.showGiftDrawable(context, viewImage, extraData.getRes_drawable_id());
			viewHint.setText("我想要 "+extraData.getGift_name());//String.valueOf(extraData.getPrice()));
			
			return convertView;
		}
	}
}

